package model

import "context"

// 各种公用的结构体模型

// ClientInstruct 客户端指令
type ClientInstruct struct {
	ClientType string `json:"clientType,omitempty"` // 客户端类型
	Code       int    `json:"code,omitempty"`
	ServeTime  int64  `json:"serveTime"`
	Body       string `json:"body,omitempty"`
}

// PluginInstruct 插件指令， 和 PluginConfig 很相识，但是用途不一样，具体情况后续要考虑插件重复执行等等场景，后面再说。现在分开
type PluginInstruct struct {
	Cmd             string   `json:"cmd" yaml:"cmd"`
	Args            []string `json:"args" yaml:"args"`
	User            string   `json:"user" yaml:"user"`
	Env             []string `json:"env" yaml:"env"`
	TimeoutDuration int64    `json:"timeoutDuration" yaml:"timeoutDuration"` // 执行超时时间
}

// PluginPipeInstruct pip插件指令
type PluginPipeInstruct struct {
	Cmd       string   `json:"cmd" yaml:"cmd"`
	Args      []string `json:"args" yaml:"args"`
	User      string   `json:"user" yaml:"user"`
	Env       []string `json:"env" yaml:"env"`
	OutChan   chan string
	CloseChan chan error
	Cancel    context.Context
}

// ClientResponse 客户端响应结构体
type ClientResponse struct {
	DeviceId   int64        `json:"deviceId,string"`      // 设备ID，举手成功后由服务端返回
	ClientType string       `json:"clientType,omitempty"` // 客户端类型
	ClientTime int64        `json:"clientTime,string"`    // 客户端时间
	Code       int          `json:"code,omitempty"`       // 响应消息的类型
	Timely     int          `json:"timely,omitempty"`     // 数据类型， 1-实时数据、 2-缓存数据 、 3-可以忽略内容的数据
	Content    PluginResult `json:"content,omitempty"`    //消息内容

}

// PluginResult 插件执行结果
type PluginResult struct {
	Plugin           string   `json:"plugin,omitempty"`
	Args             []string `json:"args" yaml:"args"`
	InstructSendTime int64    `json:"instructSendTime,string"`
	ElapsedTime      int64    `json:"elapsed_time,string"`
	Result           string   `json:"result,omitempty"`
}

// HandsUpMsg 举手的消息结构体
type HandsUpMsg struct {
	Md5             string `json:"md5,omitempty"`             // 主程序MD5
	Version         string `json:"version,omitempty"`         // 主程序版本
	MainBoardSerial string `json:"mainBoardSerial,omitempty"` // 主板序列号，只考虑基板
	HardDiskSerial  string `json:"hardDiskSerial,omitempty"`  // 硬盘序列号，只考虑第一块硬盘，且需要过滤掉USB接口的移动硬盘
	ActiveMAC       string `json:"activeMAC,omitempty"`       // 活跃网卡
	IP              string `json:"ip,omitempty"`              // IP
	Hostname        string `json:"hostname,omitempty"`
}

// LogoffSession 注销会话时的往返消息
type LogoffSession struct {
	HostSessionId int64 `json:"hostSessionId"`
	WinSessionId  int64 `json:"winSessionId"`
	Result        int   `json:"result"` // 1- 未处理；2-成功；3-失败；
}
